﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using ProyectoSelva.Const;
using ProyectoSelva.Daos;
using ProyectoSelva.Entities;
using ProyectoSelva.Validate;

namespace ProyectoSelva.Forms.Mantenimiento
{
    public partial class FrmMantenimientoTrabajador : Form , IValidateForm
    {
        private Boolean _valido;

        public static FrmMantenimientoTrabajador Activo { set; get; }

        public FrmMantenimientoTrabajador()
        {
            InitializeComponent();
            if (Activo == null)
            {
                Activo = this;
            }
            _valido = true;
            Closed += EnCierre;
            dGridResultado.AutoGenerateColumns = false;
        }

        private void EnCierre(object sender, EventArgs e)
        {
            Activo = null;
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            txtNombres.Text = txtNombres.Text.Trim();
            txtApellidos.Text = txtApellidos.Text.Trim();
            txtDocumento.Text = txtDocumento.Text.Trim();
            var trabajador = new Trabajador
                                 {
                                     Nombres = String.IsNullOrEmpty(txtNombres.Text) ? null : txtNombres.Text,
                                     Apellidos = String.IsNullOrEmpty(txtApellidos.Text) ? null : txtApellidos.Text,
                                     NumeroDocumento = String.IsNullOrEmpty(txtDocumento.Text) ? null : txtDocumento.Text
                                 };
            IList<Trabajador> lista = null;
            ActionExecutor.Execute(this,delegate
                                             {
                                                 var trabajadorDao = new TrabajadorDAO();
                                                 lista = trabajadorDao.Buscar(trabajador);
                                             });
            if (lista==null)
            {
                lista = new List<Trabajador>();
            }
            dGridResultado.DataSource = new BindingList<Trabajador>(lista);
        }

        private void tStripButtonEliminar_Click(object sender, EventArgs e)
        {
            if (dGridResultado.CurrentRow != null)
            {
                var trabajador = (Trabajador)dGridResultado.CurrentRow.DataBoundItem;
                ActionExecutor.Execute(this, delegate
                {
                    var trabajadorDao = new TrabajadorDAO();
                    trabajador.Estado = Estado.Inactivo;
                    trabajadorDao.Actualizar(trabajador);
                });
                btnBuscar_Click(sender, e);
            }
            else
            {
                MessageBox.Show(@"Debe seleccionar un elemento");
            }
        }

        private void tStripButtonModificar_Click(object sender, EventArgs e)
        {
            
            if (dGridResultado.CurrentRow!= null)
            {
                var trabajador = (Trabajador) dGridResultado.CurrentRow.DataBoundItem;
                var form = new FrmActualizarTrabajador(trabajador);
                form.ShowDialog(this);
                btnBuscar_Click(sender, e);
            }
            else
            {
                MessageBox.Show(@"Debe seleccionar un elemento");
            }

        }

        private void tStripButtonCrear_Click(object sender, EventArgs e)
        {
            var form = new FrmActualizarTrabajador(new Trabajador());
            form.ShowDialog(this);
            btnBuscar_Click(sender, e);
        }

        public void Invalid()
        {
            _valido = false;
        }

        public bool IsValid()
        {
            return _valido;
        }
    }
}
